package com.manager.commons.utils;

//                   _ooOoo_    
//                  o8888888o    
//                  88" . "88    
//                  (| -_- |)    
//                   O\ = /O    
//               ____/'---'\____    
//              /. '\\| : |//' .\    
//             // \\||| : |||// \\   
//            // _|||||-:-|||||_ \\    
//           // | | \\\ - /// | | \\
//           || |_| ''\---/'' |_| || 
//            \ .-\___/'-'\___/-. /    
//          ___\. .' /--.--\ '. ./___    
//        .""'< `.___\_<|>_/___.' >'"".    
//       | |: `- \`.|'\ _ /'|.`/ -` :| |    
//        \ \ `-. \_ __\ /__ _/ .-` / /    
//======'-.___`-.___\_______/___.-`___.-'======    
//                   '=---='    
//.................................................    
//写一哈代码，你就青叫唤；信龟儿设计，你逗是傻逼。
//永无Bug，啷个可能！求佛主保佑也没球用！

import java.util.Date;
import java.util.UUID;

import org.apache.commons.lang3.RandomStringUtils;

/**
 * UUIDUtil
 * @author H
 * @version V1.0
 */
public class UUIDUtil {

	private static UUIDUtil uuidUtil;

	public static UUIDUtil getInstance() {
		if (uuidUtil == null) {
			// 同步块，线程安全的创建实例
			synchronized (UUIDUtil.class) {
				// 再次检查实例是否存在，如果不存在才真正的创建实例
				if (uuidUtil == null) {
					uuidUtil = new UUIDUtil();
				}
			}
		}
		return uuidUtil;
	}

	/**
	 * 获得uuid（小写）
	 * @return
	 */
	public String getUuid() {
		return getUUID("", false);
	}

	/**
	 * 获得uuid（小写）
	 * @return
	 */
	public String getUuid(String separator) {
		return getUUID(separator, false);
	}

	/**
	 * 获得uuid（大写）
	 * @return
	 */
	public String getUUID() {
		return getUUID("", true);
	}

	/**
	 * 获得uuid（大写）
	 * @return
	 */
	public String getUUID(String separator) {
		return getUUID(separator, true);
	}

	/**
	 * 获得uuid
	 * @param separator
	 * @param upperCase
	 * @return
	 */
	public String getUUID(String separator, boolean upperCase) {
		String uuid = String.valueOf(UUID.randomUUID());
		String _uuid = uuid.replaceAll("-", separator);
		if (upperCase) {
			return _uuid.toUpperCase();
		}
		return _uuid;
	}

	/**
	 * 获取时间格式的id(yyyyMMddHHmmssSSS+index)
	 * @param index
	 * @return
	 */
	public String getUUIDDate(int index) {
		String _date = DateUtil.format(new Date(), "yyyyMMddHHmmssSSS");
		return getUUIDDate(_date, index);
	}

	/**
	 * 获取时间格式的id(yyyyMMddHHmmssSSS+index)
	 * @param date
	 * @param index
	 * @return
	 */
	public String getUUIDDate(String date, int index) {
		String _index = RandomStringUtils.randomNumeric(index);
		return date + _index;
	}
}